import hashlib
import numpy as np

def string_to_fixed_list(input_str, list_length=32, min_val=0, max_val=255):
    """
    将输入字符串转换为固定长度的整数列表编码
    
    参数:
        input_str: 输入字符串
        list_length: 输出列表的长度，默认为32
        min_val: 输出列表元素的最小值，默认为0
        max_val: 输出列表元素的最大值，默认为255
    
    返回:
        list: 固定长度的整数列表
    """
    # 确保输入是字符串类型
    if not isinstance(input_str, str):
        input_str = str(input_str)
    
    # 使用SHA-256哈希算法生成固定长度的哈希值
    hash_object = hashlib.sha256(input_str.encode('utf-8'))
    hash_bytes = hash_object.digest()
    
    # 将哈希字节转换为整数列表
    hash_ints = list(hash_bytes)
    
    # 如果需要的长度比哈希字节长度短，截取前部分
    if list_length <= len(hash_ints):
        result = hash_ints[:list_length]
    else:
        # 如果需要的长度比哈希字节长度长，循环扩展并截断
        extend_times = (list_length // len(hash_ints)) + 1
        extended = hash_ints * extend_times
        result = extended[:list_length]
    
    # 缩放到指定的数值范围
    if min_val != 0 or max_val != 255:
        result = [min_val + (x * (max_val - min_val) // 255) for x in result]
    
    return result

# 使用示例
if __name__ == "__main__":
    test_string = "Hello, World!"
    
    # 获取默认设置下的编码
    encoding = string_to_fixed_list(test_string)
    print(f"默认编码 ({len(encoding)} 元素): {encoding}")
    
    # 获取指定长度和范围的编码
    encoding_16 = string_to_fixed_list(test_string, list_length=16, min_val=0, max_val=100)
    print(f"16元素，范围0-100的编码: {encoding_16}")
    
    # 相同字符串应该得到相同的编码
    encoding_same = string_to_fixed_list(test_string)
    print(f"相同字符串的编码是否相同: {encoding == encoding_same}")
    
    # 不同字符串应该得到不同的编码
    another_string = "Hello, Python!"
    encoding_diff = string_to_fixed_list(another_string)
    print(f"不同字符串的编码是否不同: {encoding != encoding_diff}")    